{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Tutorial 7c - Freeform Surfaces"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": [
     "nbsphinx-toctree"
    ]
   },
   "source": [
    "### September 2024"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This tutorial demonstrates how freeform surfaces can be modeled in Optiland. Several freeform types are supported, including polynomial and Chebyshev surfaces.\n",
    "\n",
    "In this tutorial, we will design a unique singlet lens with the following properties:\n",
    "\n",
    "- rays from on-axis field point intersect the image plane at y=3mm\n",
    "- RMS spot size is minimized\n",
    "\n",
    "This is rather unique (and perhaps not all that useful), as rays from the on-axis field point in a standard lens are generally centered on the optical axis."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "from optiland import analysis, optic, optimization"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Preparation:\n",
    "\n",
    "We start by defining a freeform lens class, which has a freeform as its first surface.\n",
    "\n",
    "The freeform surface is defined as:\n",
    "\n",
    "$z(x, y) = \\frac{r^2}{R \\cdot (1 + \\sqrt{(1 - (1 + k) \\cdot r^2 / R^2)})} + \\sum\\limits_{i}\\sum\\limits_{j}{C_{i, j} \\cdot x^i \\cdot y^j}$\n",
    "\n",
    "where\n",
    "\n",
    "- $x$ and $y$ are the local surface coordinates\n",
    "- $r^2 = x^2 + y^2$\n",
    "- $R$ is the radius of curvature\n",
    "- $k$ is the conic constant\n",
    "- $C_{i, j}$ is the polynomial coefficient for indices $i, j$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Freeform(optic.Optic):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "\n",
    "        # add surfaces\n",
    "        self.add_surface(index=0, radius=np.inf, thickness=np.inf)\n",
    "\n",
    "        # ======== Add polynomial freeform here =====================================\n",
    "        self.add_surface(\n",
    "            index=1,\n",
    "            radius=100,\n",
    "            thickness=5,\n",
    "            surface_type=\"polynomial\",  # <-- surface_type='polynomial'\n",
    "            is_stop=True,\n",
    "            material=\"SF11\",\n",
    "            coefficients=[],\n",
    "        )\n",
    "        # ===========================================================================\n",
    "\n",
    "        self.add_surface(index=2, thickness=100)\n",
    "        self.add_surface(index=3)\n",
    "\n",
    "        # add aperture\n",
    "        self.set_aperture(aperture_type=\"EPD\", value=25)\n",
    "\n",
    "        # add field\n",
    "        self.set_field_type(field_type=\"angle\")\n",
    "        self.add_field(y=0)\n",
    "\n",
    "        # add wavelength\n",
    "        self.add_wavelength(value=0.55, is_primary=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We simply need to specify the surface type as 'polynomial' to make the first surface a freeform. Note that we did not pass coefficients to the surface, which implies all coefficients will be zero.\n",
    "\n",
    "Let's generate and view the starting point lens, which will simply be spherical, as the freeform coefficients are all zero."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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JHzrzf0omjIMU0JRyBBoHTwCkglNMqHLAppsQpdMaLKALpsYl0xoigktIKBLJnTZrF1TvVYU86gUcrj79h0MN0REREQ08BiCOiisK5iMBhe8LoQwYoEKgopAUAF0RSColDGkALoC+/n664DSkF3k2q2yiJWNYd26dQxARERERERgCOqo95y3Eu85b6XfyyAiIiIiojbkhS8hIiIiIiJaPhiCiIiIiIhooDAEERERERHRQGEIIiIiIiKigcIQREREREREA2XJT4cTonoyqPfwUSIiIiIiGixWJrAyQitLPgRlMhkAwOrVq31eCRERERER9YNMJoNYLNbydUksFJP6nGmaOHLkCCKRSF8eBppOp7F69WocOnQI0WjU7+VQH+Bngprh54K8+JkgL34myIufiUZCCGQyGaxatQqy3LrzZ8lXgmRZxplnnun3MhYUjUb54SQXfiaoGX4uyIufCfLiZ4K8+Jlwa1cBsnAwAhERERERDRSGICIiIiIiGigMQV2m6zruuOMO6Lru91KoT/AzQc3wc0Fe/EyQFz8T5MXPxKlb8oMRiIiIiIiITgYrQURERERENFAYgoiIiIiIaKAwBBERERER0UBhCCIiIiIiooHCEERERERERAOFIaiLvvGNb2DdunUIBoPYvHkznnnmGb+XRD20c+dOvP3tb0ckEkE8HscHPvABvPrqq65rCoUCbrzxRoyNjSEcDuMP/uAPkEwmfVox9dKXvvQlSJKEW265xX6On4fBdPjwYXzkIx/B2NgYhoaGcP755+O5556zXxdC4POf/zxWrlyJoaEhbN26Ffv37/dxxdRNlUoFt99+O9avX4+hoSGcddZZuPvuu+Ec5svPxPL3xBNP4H3vex9WrVoFSZLwwx/+0PX6Yj4Dx48fx7XXXotoNIqRkRF8/OMfRzab7eHPor8xBHXJd7/7XWzfvh133HEHnn/+eVx44YW46qqrkEql/F4a9cjjjz+OG2+8EU899RQeeeQRlEolvPvd70Yul7OvufXWW/HjH/8Y3//+9/H444/jyJEj+OAHP+jjqqkXnn32Wfzd3/0dLrjgAtfz/DwMnhMnTuCKK65AIBDAT37yE+zbtw9/8zd/g9HRUfua++67D1/72tfwzW9+E08//TSGh4dx1VVXoVAo+Lhy6pZ7770X999/P/72b/8WL7/8Mu69917cd999+PrX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",
      "text/plain": [
       "<Figure size 1000x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "lens = Freeform()\n",
    "lens.draw(num_rays=5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now define the optimization problem. Let's start with the two operands: 1) RMS spot size and 2) real ray y-intercept."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "problem = optimization.OptimizationProblem()\n",
    "\n",
    "# RMS spot size operand\n",
    "input_data = {\n",
    "    \"optic\": lens,\n",
    "    \"surface_number\": -1,\n",
    "    \"Hx\": 0,\n",
    "    \"Hy\": 0,\n",
    "    \"wavelength\": 0.55,\n",
    "    \"num_rays\": 5,\n",
    "}\n",
    "problem.add_operand(\n",
    "    operand_type=\"rms_spot_size\",\n",
    "    target=0,\n",
    "    weight=1,\n",
    "    input_data=input_data,\n",
    ")\n",
    "\n",
    "# Real y-intercept operand\n",
    "input_data = {\n",
    "    \"optic\": lens,\n",
    "    \"surface_number\": -1,\n",
    "    \"Hx\": 0,\n",
    "    \"Hy\": 0,\n",
    "    \"Px\": 0,\n",
    "    \"Py\": 0,\n",
    "    \"wavelength\": 0.55,\n",
    "}\n",
    "problem.add_operand(\n",
    "    operand_type=\"real_y_intercept\",\n",
    "    target=3,\n",
    "    weight=1,\n",
    "    input_data=input_data,\n",
    ")  # <-- target=3"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We will include the first 9 polynomial coefficients of our surface as variables. We will not add bounds for the coefficients."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+----+------------------------+-------------------+\n",
      "|    |   Merit Function Value |   Improvement (%) |\n",
      "|----+------------------------+-------------------|\n",
      "|  0 |                12.1244 |                 0 |\n",
      "+----+------------------------+-------------------+\n",
      "+----+------------------+----------+----------+---------+----------+--------------------+\n",
      "|    | Operand Type     |   Target |   Weight |   Value |    Delta |   Contribution (%) |\n",
      "|----+------------------+----------+----------+---------+----------+--------------------|\n",
      "|  0 | rms spot size    |        0 |        1 | 1.76759 |  1.76759 |            25.7694 |\n",
      "|  1 | real y intercept |        3 |        1 | 0       | -3       |            74.2306 |\n",
      "+----+------------------+----------+----------+---------+----------+--------------------+\n",
      "+----+------------------+-----------+---------+--------------+--------------+\n",
      "|    | Variable Type    |   Surface |   Value | Min. Bound   | Max. Bound   |\n",
      "|----+------------------+-----------+---------+--------------+--------------|\n",
      "|  0 | polynomial_coeff |         1 |       0 |              |              |\n",
      "|  1 | polynomial_coeff |         1 |       0 |              |              |\n",
      "|  2 | polynomial_coeff |         1 |       0 |              |              |\n",
      "|  3 | polynomial_coeff |         1 |       0 |              |              |\n",
      "|  4 | polynomial_coeff |         1 |       0 |              |              |\n",
      "|  5 | polynomial_coeff |         1 |       0 |              |              |\n",
      "|  6 | polynomial_coeff |         1 |       0 |              |              |\n",
      "|  7 | polynomial_coeff |         1 |       0 |              |              |\n",
      "|  8 | polynomial_coeff |         1 |       0 |              |              |\n",
      "+----+------------------+-----------+---------+--------------+--------------+\n"
     ]
    }
   ],
   "source": [
    "for i in range(3):\n",
    "    for j in range(3):\n",
    "        problem.add_variable(\n",
    "            lens,\n",
    "            \"polynomial_coeff\",\n",
    "            surface_number=1,\n",
    "            coeff_index=(i, j),\n",
    "        )\n",
    "\n",
    "problem.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's optimize and observe the merit function improvement."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "optimizer = optimization.OptimizerGeneric(problem)\n",
    "res = optimizer.optimize(tol=1e-9)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+----+------------------------+-------------------+\n",
      "|    |   Merit Function Value |   Improvement (%) |\n",
      "|----+------------------------+-------------------|\n",
      "|  0 |            0.000131601 |           99.9989 |\n",
      "+----+------------------------+-------------------+\n",
      "+----+------------------+----------+----------+-----------+-------------+--------------------+\n",
      "|    | Operand Type     |   Target |   Weight |     Value |       Delta |   Contribution (%) |\n",
      "|----+------------------+----------+----------+-----------+-------------+--------------------|\n",
      "|  0 | rms spot size    |        0 |        1 | 0.0114717 | 0.0114717   |      100           |\n",
      "|  1 | real y intercept |        3 |        1 | 3.00001   | 7.39774e-06 |        4.15852e-05 |\n",
      "+----+------------------+----------+----------+-----------+-------------+--------------------+\n",
      "+----+------------------+-----------+--------------+--------------+--------------+\n",
      "|    | Variable Type    |   Surface |        Value | Min. Bound   | Max. Bound   |\n",
      "|----+------------------+-----------+--------------+--------------+--------------|\n",
      "|  0 | polynomial_coeff |         1 | -6.9106e-08  |              |              |\n",
      "|  1 | polynomial_coeff |         1 | -0.0368853   |              |              |\n",
      "|  2 | polynomial_coeff |         1 |  0.00113568  |              |              |\n",
      "|  3 | polynomial_coeff |         1 |  3.78402e-10 |              |              |\n",
      "|  4 | polynomial_coeff |         1 | -3.19398e-08 |              |              |\n",
      "|  5 | polynomial_coeff |         1 | -7.42647e-09 |              |              |\n",
      "|  6 | polynomial_coeff |         1 |  0.00113339  |              |              |\n",
      "|  7 | polynomial_coeff |         1 | -5.4136e-07  |              |              |\n",
      "|  8 | polynomial_coeff |         1 | -4.64894e-08 |              |              |\n",
      "+----+------------------+-----------+--------------+--------------+--------------+\n"
     ]
    }
   ],
   "source": [
    "problem.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, we plot the lens and view a spot diagram."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1000x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "lens.draw(num_rays=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1200x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "spot = analysis.SpotDiagram(lens)\n",
    "spot.view()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We clearly see that the front surface of our lens appears to be tilted, which forces the on-axis rays to intercept the image plane near y=3mm."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Conclusions:\n",
    "\n",
    "- We introduced freeform surfaces in Optiland.\n",
    "- We optimized a singlet lens for minimal spot size and for an off-axis real ray intercept point.\n",
    "- Additional freeform surfaces are available and can be found in the optiland.geometries module or the documentation."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
